package accesoDatos;
import entidades.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import dataSet.*;
public class adCursos extends adDatos {
	 public Curso getCursoxintComision(int idComision)
     {
		  Curso cursoActual;
         cursoActual = new Curso();

		 Connection oCnn = crearConexion();
        StringBuilder sb = new StringBuilder();
        sb.append(" SELECT ");
        sb.append(" * ");
        sb.append(" FROM cursos ");
        sb.append(" WHERE id_comision = "+idComision );
        sb.append(";");
        Statement cmdGet;
        try {
        	cmdGet = oCnn.createStatement();
        	ResultSet registro = cmdGet.executeQuery(sb.toString());
        	if (registro.next()==true) {
   			registro.beforeFirst();
   			  while (registro.next()){
   				  cursoActual.setId(registro.getInt("id_curso"));
   				  cursoActual.setIdMateria(registro.getInt("id_materia"));
   				  cursoActual.setIdComision(registro.getInt("id_comision"));
   				  cursoActual.setAnioCalendario(registro.getInt("anio_calendario"));
   				  cursoActual.setCupo(registro.getInt("cupo"));
   			  }
   	            oCnn.close();

     
        	}
        }catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: Select curso.");
        	}
        return cursoActual;

     }
	
	
	
	
	
	
	
	
	public void agregarCurso(Curso cursoActual)
    {
		Connection oCnn = crearConexion();
		StringBuilder sb = new StringBuilder();
        sb.append(" INSERT INTO cursos( ");
        sb.append("     id_materia ");
        sb.append("     ,id_comision ");
        sb.append("     ,anio_calendario ");
        sb.append("     ,cupo ");
        sb.append(" ) ");
        sb.append(" VALUES ( ");
        sb.append(      	cursoActual.getIdMateria()	+	",");
        sb.append(     		cursoActual.getIdComision() + 	",");
        sb.append(     		cursoActual.getAnioCalendario()	+"," );
        sb.append(			cursoActual.getCupo());
        sb.append(" ); ");
		
        Statement cmdAgregarCurso;
        	try {
        		cmdAgregarCurso =oCnn.createStatement();
        		cmdAgregarCurso.executeUpdate(sb.toString());
        		oCnn.close();
        	}catch (SQLException e) {
    		e.printStackTrace();
    		System.out.println("ERROR SQL :no agrega Curso");
        	}
        

		
    	}

	public void borrarCurso(int id_curso){
	
		Connection oCnn = crearConexion();
		StringBuilder sb = new StringBuilder();
		sb.append(" DELETE FROM cursos ");
        sb.append(" WHERE id_curso = ");
        sb.append(id_curso);
        sb.append(";");
        Statement cmdBorrarCurso;
        try{
        	cmdBorrarCurso = oCnn.createStatement();
        	cmdBorrarCurso.executeUpdate(sb.toString());
        	oCnn.close();
        }catch (SQLException e){
        	e.printStackTrace();
        	System.out.println("ERROR SQL :no borrar curso");
        }
	}
	
	 public void modificarCurso(Curso cursoActual){
		 Connection oCnn = crearConexion();
		 StringBuilder sb = new StringBuilder();
         sb.append(" UPDATE cursos ");
         sb.append(" SET  ");
         sb.append("     id_materia = "+cursoActual.getIdMateria());
         sb.append("     ,id_comision ="+ cursoActual.getIdComision());
         sb.append("     ,anio_calendario ="+ cursoActual.getAnioCalendario());
         sb.append("     ,cupo = "+ cursoActual.getCupo());
         sb.append(" WHERE id_curso = "+ cursoActual.getId());
         sb.append(";");
         Statement cmdModCurso;
 
        try{
        	cmdModCurso = oCnn.createStatement();
        	cmdModCurso.executeUpdate(sb.toString());
        	oCnn.close();
        	 
         }catch(SQLException e){
        	 e.printStackTrace();
        	 System.out.println("error sql al mod cursos");
         }
	 
	 }
	  public Curso getCurso(int id_curso)
      {
		  Curso cursoActual;
          cursoActual = new Curso();

		 Connection oCnn = crearConexion();
         StringBuilder sb = new StringBuilder();
         sb.append(" SELECT ");
         sb.append(" * ");
         sb.append(" FROM cursos ");
         sb.append(" WHERE id_curso = "+id_curso );
         sb.append(";");
         Statement cmdGet;
         try {
         	cmdGet = oCnn.createStatement();
         	ResultSet registro = cmdGet.executeQuery(sb.toString());
         	if (registro.next()==true) {
    			registro.beforeFirst();
    			  while (registro.next()){
    				  cursoActual.setId(registro.getInt("id_curso"));
    				  cursoActual.setIdMateria(registro.getInt("id_materia"));
    				  cursoActual.setIdComision(registro.getInt("id_comision"));
    				  cursoActual.setAnioCalendario(registro.getInt("anio_calendario"));
    				  cursoActual.setCupo(registro.getInt("cupo"));
    			  }
    	            oCnn.close();

      
         	}
         }catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: Select comision.");
         	}
         return cursoActual;

      }
	  public ArrayList<Curso> recuperarTodos(){
			 Connection oCnn = crearConexion();
			ArrayList<Curso> listaCursos = new ArrayList<Curso>();
			Curso cursoActual;
			String sql = "SELECT * FROM cursos;";
			Statement cmdExe;
			try {
				cmdExe = oCnn.createStatement();
				ResultSet registro = cmdExe.executeQuery(sql);

           		if (registro.next()==true) {
           			registro.beforeFirst();
           			
           			while (registro.next()){
           				cursoActual = new Curso();
           				cursoActual.setId(registro.getInt("id_curso"));
           				cursoActual.setIdMateria(registro.getInt("id_materia"));
           				cursoActual.setIdComision(registro.getInt("id_comision"));
           				cursoActual.setAnioCalendario(registro.getInt("anio_calendario"));
           				cursoActual.setCupo(registro.getInt("cupo"));
           				listaCursos.add(cursoActual);
           			}
           				
           			}
           		oCnn.close();
			}catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: Select comision.");
            	}
       		return listaCursos;
       		
	  }
       	 public ArrayList<Curso> recuperarCursosParaGrilla(int id_materia){
			 Connection oCnn = crearConexion();
			 ArrayList<Curso> listaCursos = new ArrayList<Curso>();
	         Curso curso;
	         StringBuilder sb = new StringBuilder();
	         sb.append(" SELECT c.id_curso, c.id_comision, c.id_materia, com.desc_comision, com.anio_especialidad, c.anio_calendario, c.cupo ");
	         sb.append(" FROM cursos c ");
	         sb.append(" INNER JOIN comisiones com ON c.id_comision = com.id_comision ");
	         sb.append(" WHERE c.id_materia = "); 
	         sb.append(id_materia);// checkear 
	         sb.append(" AND c.cupo > 0 ");
	         
	         Statement cmdExe;
				try {
					cmdExe = oCnn.createStatement();
					ResultSet registro = cmdExe.executeQuery(sb.toString());
					if (registro.next()==true) {
	           			registro.beforeFirst();
	           			
	           			while (registro.next()){
	           				curso = new Curso();
	           				curso.setId(registro.getInt("id_curso"));
	           				curso.setAnioCalendario(registro.getInt("anio_calendario"));
	           				curso.setIdComision(registro.getInt("id_comision"));
	           				curso.setIdMateria(registro.getInt("id_materia"));
	           				curso.setDescripcion(registro.getString("desc_comision"));
	           				curso.setAnioEspecialidad(registro.getInt("anio_especialidad"));
	           				curso.setCupo(registro.getInt("cupo"));
	           				listaCursos.add(curso);
           			}
	           			oCnn.close();
					}


				}catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: cursos.");
         	}
				return listaCursos;

       	 }
       	public ArrayList<CursoComision> recuperarCursosComision(int id_materia){
			 Connection oCnn = crearConexion();
			 ArrayList<CursoComision> listaCursos = new ArrayList<CursoComision>();
	         CursoComision curso;
	         StringBuilder sb = new StringBuilder();
	         sb.append(" SELECT c.id_curso, c.id_comision, c.id_materia, com.desc_comision, com.anio_especialidad, c.anio_calendario, c.cupo ");
	         sb.append(" FROM cursos c ");
	         sb.append(" INNER JOIN comisiones com ON c.id_comision = com.id_comision ");
	         sb.append(" WHERE c.id_materia = "); 
	         sb.append(id_materia);// checkear 
	         sb.append(" AND c.cupo > 0 ");
	         
	         Statement cmdExe;
				try {
					cmdExe = oCnn.createStatement();
					ResultSet registro = cmdExe.executeQuery(sb.toString());
					if (registro.next()==true) {
	           			registro.beforeFirst();
	           			
	           			while (registro.next()){
	           				curso = new CursoComision();
	           				curso.setIdCurso(registro.getInt("id_curso"));
	           				curso.setAnioCalendario(registro.getInt("anio_calendario"));
	           				curso.setIdComision(registro.getInt("id_comision"));
	           				curso.setIdMateria(registro.getInt("id_materia"));
	           				curso.setDescripcion(registro.getString("desc_comision"));
	           				curso.setAnioEspecialidad(registro.getInt("anio_especialidad"));
	           				curso.setCupo(registro.getInt("cupo"));
	           				listaCursos.add(curso);
          			}
	           			oCnn.close();
					}


				}catch (SQLException e) {
				e.printStackTrace();
				System.out.println("ERROR: cursosComision.");
        	}
				return listaCursos;

      	 }
       	 
				
       	 public void registrarInscripcion(int idCurso, int id_alumno){// cambie el bool por void
					 Connection oCnn = crearConexion();
					 StringBuilder sb = new StringBuilder();
			            sb.append(" INSERT INTO alumnos_inscripciones( ");
			            sb.append("            id_alumno ");
			            sb.append("            ,id_curso ");
			            sb.append("            ,condicion ");
			            sb.append(" ) VALUES ( ");
			            sb.append(           id_alumno +",");
			            sb.append(  		 idCurso +",");
			            sb.append(			 "'Inscripto' ");
			            sb.append(" ); ");
			            Statement cmdExe;
						try {
							cmdExe = oCnn.createStatement();
							cmdExe.executeUpdate(sb.toString());
							 oCnn.close();
						}catch (SQLException e) {
							e.printStackTrace();
							System.out.println("no agrega comision");
						}

					
	  
				}
       	 
       	 public void actualizarCupo(int idCurso, int cupo){
			 Connection oCnn = crearConexion();
			 StringBuilder sb = new StringBuilder();
	            sb.append(" UPDATE cursos ");
	            sb.append(" SET  ");
	            sb.append("     cupo = "+cupo);
	            sb.append(" WHERE id_curso = "+idCurso +";");
	            Statement cmdExe;
		         try {
		        	 cmdExe =oCnn.createStatement();
			    	cmdExe.executeUpdate(sb.toString()); 
		   		 	oCnn.close();
		         	}catch (SQLException e) {
			     		e.printStackTrace();
			     		System.out.println("ERROR SQL: no ActualizaCupo");
			     	}

       	 }
	  
       	public ArrayList<Curso> recuperarInscripciones(int id_alumno){
 
       		Connection oCnn = crearConexion();
			 ArrayList<Curso> listaCursos = new ArrayList<Curso>();
	         Curso curso;
	            StringBuilder sb = new StringBuilder();

	            //Recupero sólo los cursos de una materia en particular y que tengan cupo
	            sb.append(" SELECT c.id_curso, m.desc_materia, com.desc_comision, c.anio_calendario, c.cupo ");
	            sb.append(" FROM alumnos_inscripciones ai ");
	            sb.append(" INNER JOIN cursos c ON ai.id_curso = c.id_curso ");
	            sb.append(" INNER JOIN materias m ON m.id_materia = c.id_materia ");
	            sb.append(" INNER JOIN comisiones com ON com.id_comision = c.id_comision ");
	            sb.append(" WHERE ai.condicion = 'Inscripto' ");
	            sb.append(" AND ai.id_alumno = "); 
	            sb.append(id_alumno);
	            sb.append(";");
	            Statement cmdExe;
				try {

					cmdExe = oCnn.createStatement();
					ResultSet registro = cmdExe.executeQuery(sb.toString());

					if (registro.next()==true) {
	           			registro.beforeFirst();

	           			while (registro.next()){

	           				curso = new Curso();
	           				curso.setId(registro.getInt("id_curso"));
	           				curso.setAnioCalendario(registro.getInt("anio_calendario"));
	           				curso.setNombreMateria(registro.getString("desc_materia"));
	           				curso.setDescripcion(registro.getString("desc_comision"));
	           				curso.setCupo(registro.getInt("cupo"));
	           				listaCursos.add(curso);
	           			}
	                    oCnn.close();
	           				
	           			}
       	
	            
       	}catch (SQLException e) {
     		e.printStackTrace();
     		System.out.println("ERROR SQL: no devuelve insc");
     	}
	            return listaCursos;

         	
       	}
       	
        public void borrarInscripcion(int idCurso, int idAlumno){//cambiada por void era boolean
			 Connection oCnn = crearConexion();
			 StringBuilder sb = new StringBuilder();

	            sb.append(" DELETE FROM alumnos_inscripciones ");
	            sb.append(" WHERE id_curso = "+idCurso );
	            sb.append(" AND id_alumno = "+idAlumno );
	            sb.append(";");
	            Statement cmdExe;
				try {
					cmdExe = oCnn.createStatement();
					cmdExe.executeUpdate(sb.toString());
					oCnn.close();

        }catch (SQLException e) {
			e.printStackTrace();
			System.out.println("no borra Incruocion");
		}
        }
        public void borrarInscripcion(int id_inscripcion){//ssobrecarga tmb era boolean
			 Connection oCnn = crearConexion();
			 StringBuilder sb = new StringBuilder();

	            sb.append(" DELETE FROM alumnos_inscripciones ");
	            sb.append(" WHERE id_inscripcion = "+id_inscripcion );
	            sb.append(";");
	            Statement cmdExe;
				try {
					cmdExe = oCnn.createStatement();
					cmdExe.executeUpdate(sb.toString());
					oCnn.close();

        }catch (SQLException e) {
			e.printStackTrace();
			System.out.println("no borra Incripcion");
		}
				
				
				
        }
        
        public ArrayList<InscripcionTotal> recuperarInscripcionesTotales(String condicion){//chekear
        	ArrayList<InscripcionTotal> inscripcionesTotales = new ArrayList<InscripcionTotal>();
			 Connection oCnn = crearConexion();
			 InscripcionTotal it;
			  StringBuilder sb = new StringBuilder();

	            //Recupero sólo los cursos de una materia en particular y que tengan cupo
	            sb.append(" SELECT ai.id_inscripcion, p.legajo, p.Nombre, p.Apellido, m.desc_Materia, com.desc_comision, c.anio_calendario, ai.condicion ");
	            sb.append(" FROM alumnos_inscripciones ai ");
	            sb.append(" INNER JOIN personas p ON ai.id_alumno = p.id_persona ");
	            sb.append(" INNER JOIN cursos c ON c.id_curso = ai.id_curso ");
	            sb.append(" INNER JOIN materias m ON c.id_materia = m.id_materia ");
	            sb.append(" INNER JOIN comisiones com ON c.id_comision = com.id_comision ");
	            sb.append(" WHERE ai.condicion = '"); 
	            sb.append(condicion); 
	            sb.append("';");
	            Statement cmdSELECT;
	            try{
	              	cmdSELECT = oCnn.createStatement();

	            	ResultSet registro = cmdSELECT.executeQuery(sb.toString());
	            	if (registro.next()==true) {
              			registro.beforeFirst();
              			
              			while (registro.next()){
              				it =new InscripcionTotal();
              				it.setIdIncripcion(registro.getInt("ai.id_inscripcion"));
              				it.setLegajo(registro.getInt("p.legajo"));
              				it.setNombre(registro.getString("p.Nombre"));
              				it.setApellido(registro.getString("p.Apellido"));
              				it.setDescripcionMateria(registro.getString("m.desc_Materia"));
              				it.setDescripcion(registro.getString("com.desc_comision"));
              				it.setAnioCalendario(registro.getInt("c.anio_calendario"));
              				it.setCondicion(registro.getString("ai.condicion"));
              				inscripcionesTotales.add(it);
              				
              			}
	            	
	            }
        	
        }catch (SQLException e) {
			e.printStackTrace();
			System.out.println("no anda el intento de dataset");
		}
	            return inscripcionesTotales;
        }
        
        public void ActualizarCondiciones(String condActual, String condNueva, int idInscripcion){
			 Connection oCnn = crearConexion();
	            StringBuilder sb = new StringBuilder();
			//Recupero sólo los cursos de una materia en particular y que tengan cupo
	            sb.append(" UPDATE alumnos_inscripciones ");
	            sb.append(" SET condicion = '"+condNueva );
	            sb.append("' WHERE condicion = '"+condActual+"'" );
	            if (idInscripcion != -1)
	            {
	                sb.append(" AND id_inscripcion = "+idInscripcion );
	            }
	            sb.append(";");
	            Statement cmdModificarInscripcion ;
	            try {
	            	cmdModificarInscripcion =oCnn.createStatement();
	            	cmdModificarInscripcion.executeUpdate(sb.toString());
	        		 oCnn.close();
	        	}catch (SQLException e) {
	        		e.printStackTrace();
	        		System.out.println("sql :Actaulizar Condiciones error");
	        	}
	            
	     
	            
        }
				
        public ArrayList<CursoMateriaComision> recuperarCursosParaReporte()
        {
        	ArrayList<CursoMateriaComision> cursosMateriasComisiones = new ArrayList<CursoMateriaComision>();
			 Connection oCnn = crearConexion();
			 StringBuilder sb = new StringBuilder();
			 CursoMateriaComision cmc;
	            //Recupero sólo los cursos de una materia en particular y que tengan cupo
	            sb.append(" SELECT c.id_curso, m.desc_materia, com.desc_comision, c.anio_calendario, c.cupo ");
	            sb.append(" FROM cursos c  ");
	            sb.append(" INNER JOIN materias m ON c.id_materia = m.id_materia ");
	            sb.append(" INNER JOIN comisiones com ON c.id_comision = com.id_comision ");
	            sb.append(" ORDER BY com.anio_especialidad, c.anio_calendario, m.desc_materia, com.desc_comision, c.cupo ASC ");
	            Statement cmdSELECT;
	            try{
	              	cmdSELECT = oCnn.createStatement();

	            	ResultSet registro = cmdSELECT.executeQuery(sb.toString());
	            	if (registro.next()==true) {
              			registro.beforeFirst();
              			
              			while (registro.next()){
              				cmc = new CursoMateriaComision();
              				cmc.setIdCurso(registro.getInt("c.id_curso"));
              				cmc.setDescripcion(registro.getString("m.desc_materias"));
              				cmc.setDescripcionComision(registro.getString("com.desc_comision"));
              				cmc.setAnioCalendario(registro.getInt("c.anio_calendario"));
              				cmc.setCupo(registro.getInt("c.cupo"));
              				cursosMateriasComisiones.add(cmc);
              				
              			}
	            	}
	            }catch (SQLException e) {
	        		e.printStackTrace();
	        		System.out.println("sql error el intento de dataset");
	        	}
        
        return cursosMateriasComisiones;
        }
	
        public boolean existeCurso(String idMateria, String idComision){
			 Connection oCnn = crearConexion();
			 boolean respuesta =false;
			 String sql ="SELECT * FROM cursos WHERE id_materia = "+idMateria+"AND id_comision = "+idComision+";";
			 Statement cmdSELECT;
	            try{
	              	cmdSELECT = oCnn.createStatement();

	            	ResultSet registro = cmdSELECT.executeQuery(sql);
	            	if (registro.next()==true) {
	            		respuesta = true;
	            	}

        }catch (SQLException e) {
    		e.printStackTrace();
    		System.out.println("sql existecruso error");
    	}
	     return respuesta;       
        }
        public void borrarInscripcionDeAlumno(int idAlumno)
        {
            Connection oCnn = crearConexion();

            StringBuilder sb = new StringBuilder();

            sb.append(" DELETE FROM alumnos_inscripciones ");
            sb.append(" WHERE id_alumno = "+idAlumno);
            sb.append(";");
            Statement cmdBorrarInscripcion;
            try {
            	cmdBorrarInscripcion =oCnn.createStatement();
            	cmdBorrarInscripcion.executeUpdate(sb.toString());
        		 oCnn.close();
        	}catch (SQLException e) {
        		e.printStackTrace();
        		System.out.println("sql :borrar inscripcion");
        	}
            
            

        }
        public boolean tieneInscriptos(String idCurso)
        {
            boolean respuesta = false;
        	Connection oCnn = crearConexion();

            StringBuilder sb = new StringBuilder();

            sb.append(" SELECT * ");
            sb.append(" FROM alumnos_inscripciones ");
            sb.append(" WHERE id_curso ="+idCurso );
            sb.append(";");

            Statement cmdSELECT;
            try{
              	cmdSELECT = oCnn.createStatement();

            	ResultSet registro = cmdSELECT.executeQuery(sb.toString());
            	if (registro.next()==true) {
            		respuesta = true;
            	}

    }catch (SQLException e) {
		e.printStackTrace();
		System.out.println("sql tiene incriptos method error");
	}
            
            
           
            return respuesta;
        }


        
}
